/*
  排队打水问题
  题目描述
    有 n 个人排队到 r 个水龙头去打水，他们装满水桶的时间 t1, t2, ..., tn 为整数且各不相等，
    应如何安排他们的打水顺序才能使他们花费的总时间最少？

    每个人打水的时间 = 排队的时间 + 实际打水的时间，
    本题假设一个人打好水，排在他后面的人接着打水的这个切换过程不消耗时间。
      例如: 有 2 个人 A 和 B，他们打水的时间分别是 3 和 2，只有 1 个水龙头，
            这时，如果 A 先打水，B 后打水，那么 A 和 B 打水的时间分别为 3、3 + 2（B 排队 3 分钟）。
    因此，所有人打水的总时间就是每个人的打水时间及每个人的排队时间的总和。
  输入格式
    第 1 行，两个整数 n (1 <= n <= 500)和 r (1 <= r <= 100)。
    第 2 行，n 个正整数 t1, t2, ..., tn，(1 <= ti <= 1000)表示每个人装满水桶的时间。
  输出格式
    1 行，一个正整数，表示他们花费的最少总时间。
  输入数据 1
    4 2
    2 6 4 5
  输出数据 1
    23
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, r;
    int a[503] = {}; // a[i] 表示第 i (i > 0) 个人装满水需要的时间

    cin >> n >> r;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    // 思路:
    // 只有装水需要的时间少的人先装水, 这样才能保证所有人装完水需要的时间最短!

    // 对 a[1] ~ a[n] 从小到大的顺序进行排序
    sort(a + 1, a + n + 1);

    int a1[105] = {}; // a1[i] 表示第 i (i > 0) 个水龙头的累计使用时间
    int num = 0; // 所有人打水所花费的总时间
    // 第 1 ~ r 个人不用排队, 所以他们各对应的打水时间等于装水时间!
    for (int i = 1; i <= r; i++) {
        a1[i] = a[i];
        num = num + a[i];
    }

    // 计算第 r + 1 到 第 n 个人的打水时间
    for (int i = r + 1; i <= n; i++) {
        // 对 a1[1] ~ a1[r] 按从小到大的顺序进行排队
        sort(a1 + 1, a1 + 1 + r);

        a1[1] = a1[1] + a[i]; // 选择需要的排队时间(水龙头累计使用时间)最少的水龙头
        num = num + a1[1];
    }
    cout << num;

    return 0;
}